mysql字符串排序

本文介绍了两种SQL查询技巧。第一种是将字符串字段转换为数字进行排序,例如通过`code+0`实现升序排列。第二种情况涉及具有不同前缀的字符串字段排序,首先按前缀分类,然后按前缀后的数字部分排序。通过使用`CASE`语句和`INSTR`函数,可以实现复杂的排序逻辑,确保包含关系的字符串正确排序。示例中给出了创建表和插入测试数据的过程,以及相应的查询语句来演示这些排序方法的应用。
摘要由CSDN通过智能技术生成

1.字符串转成数字排序,直接后面+0

字段+0;

例如:

select code from user order by code+0 ASC;

2.字段是字符串但是字段前缀不同,首先根据前缀排序,然后根据前缀后面升序排序

建表并插入测试数据:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for t_differentprefix_sort
-- ----------------------------
DROP TABLE IF EXISTS `t_differentprefix_sort`;
CREATE TABLE `t_differentprefix_sort`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of t_differentprefix_sort
-- ----------------------------

INSERT INTO `t_differentprefix_sort` VALUES (1, 'TYPEA-101', 'TYPEA');
INSERT INTO `t_differentprefix_sort` VALUES (2, 'TYPEA-102', 'TYPEA-');
INSERT INTO `t_differentprefix_sort` VALUES (3, 'TYPEC-101', 'TYPEC');
INSERT INTO `t_differentprefix_sort` VALUES (4, 'TYPEC102', 'TYPEC');
INSERT INTO `t_differentprefix_sort` VALUES (5, 'TYPEB101', 'TYPEAB');
INSERT INTO `t_differentprefix_sort` VALUES (6, 'TYPEB-1003', 'TYPEAB');

SET FOREIGN_KEY_CHECKS = 1;
 

查询:(注意这种包含的如果有被包含关系,要把字符串长的放前面,如:有AB和ABC,要把ABC放前面)

    SELECT
        id,name,type,
    CASE
            WHEN instr( NAME, "TYPEA-" ) > 0 THEN
            REPLACE ( NAME, "TYPEA-", "" ) 
            WHEN instr( NAME, "TYPEB-" ) > 0 THEN
            REPLACE ( NAME, "TYPEB-", "" ) 
            WHEN instr( NAME, "TYPEC-" ) > 0 THEN
            REPLACE ( NAME, "TYPEC-", "" ) 
        END subsName 
FROM
        t_differentprefix_sort order by type ASC, subsName+0 ASC;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值